<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+

/**
 * @file entrance_page.test.php
 * @brief файл содержит код для тестирования класса EntrancePage \n
 * @include entrance_page.test.php
 */

/*! @addtogroup TestWebFormsQA Tестирование проекта WebFormsQA
 *  Группа включает классы для тестирования исходного кода
 *  @{
 */


/**
 * @class EntrancePageTest
 * @brief Класс для проверки страницы регистрации нового пользователя EntrancePage \n
 *        Исходный код [ @ref entrance_page.test.php ] 
 */
class EntrancePageTest extends PHPUnit_TestCase {

    /**
     * Метод проверяет состояния страницы регистрации пользователя
     */
    function testUpdate()
    {
        require_once('smarty/smarty.class.php');
        $smarty         = new Smarty;
        $attr           = array();

        // путь к текущему активному шаблону
        $path_template  = "./templates/first/";
        $main_page= new MainPage($smarty, $attr, $path_template, "");

        DataAddTest::DeleteTestDataInDatabase();
        DataAddTest::AddTestDataInDatabase();
        
        $base   = &$GLOBALS["base"];

        
        // тестовый пользовател с административными правами
        $login 	= "testUser1";
        $pass	= "testUser1";
        $email	= "test@mail.ru";
        $admin	= true;
        
        
        $data 	= compact("login", "pass", "email", "admin");
        $id		= "";
        // уже есть в базе
	    $this->assertFalse( $base->addUser($data, $id) );
	    
	    
	    $login 	= "testUser2";
        $pass	= "test";
        $email	= "test@mail.ru";
        $admin	= false;
        $data 	= compact("login", "pass", "email", "admin");
        $this->assertTrue( $base->addUser($data, $id) );
        $this->assertEquals(2, $id);
	    $this->assertFalse( $base->addUser($data, $id) );
       

        // состояние страницы
        // 0 - начальное состояние
        // 1 - пользователь идентифицирован
        // 2 - выход
        // 0 - введен неправильный пароль
        $smarty->assign("state", 0);
        
        $_POST['entrance_page']  	= '';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(0, $state);

        $_POST['first']     	= 'testUser1';
        $_POST['second']		= 'testUser2';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(3, $state);
        
        $_POST['first']     	= 'testUser1';
        $_POST['second']		= 'testUser1';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(1, $state);
        
        $this->assertTrue( isset($_SESSION["id_user"]) );
	    $this->assertTrue( isset($_SESSION["authorization_user"]) );
	    $this->assertTrue( isset($_SESSION["authorization_admin"]) );
        $this->assertEquals(1, $_SESSION["id_user"]);
        $this->assertFalse( $smarty->get_template_vars('dispay_entrance') );

        $this->assertEquals("testUser1", $_SESSION["authorization_user"]);
        $this->assertEquals(1, $_SESSION["authorization_admin"]);
        $this->assertEquals(1, $_SESSION["id_user"]);
        
        
        $_POST['first']     	= 'testUser1';
        $_POST['second']		= 'testUser1';
        $_POST['exit']     	    = '';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        // пароль при выходе передаваться не должен
        $this->assertEquals(1, $state);
        
        unset( $_POST['first'] );
        unset( $_POST['second'] );
        $_POST['exit']     	    = '';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(2, $state);
        
        
        $this->assertFalse( isset($_SESSION["id_user"]) );
	    $this->assertFalse( isset($_SESSION["authorization_user"]) );
	    $this->assertFalse( isset($_SESSION["authorization_admin"]) );
	    $this->assertFalse( $smarty->get_template_vars('dispay_entrance') );
        

	    $_POST['first']     	= 'testUser2';
        $_POST['second']		= 'testUser';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(3, $state);
        
        $_POST['first']     	= 'testUser2';
        $_POST['second']		= 'test';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(1, $state);
        // пользователь не обладает административными правами
        $this->assertFalse( $_SESSION["authorization_admin"] );
        $this->assertEquals( 2, $_SESSION["id_user"] );
        
        unset( $_SESSION["authorization_admin"] );
        unset( $_SESSION["id_user"] );
		unset( $_SESSION['categoryID'] );

        unset( $_POST['entrance_page'] );
        unset( $_POST['entrance'] );
        unset( $_POST['first'] );
        unset( $_POST['second'] );
        unset( $_POST['exit'] );
        
        
        
    } // testUpdate


} // EntrancePageTest

/*! @} */

?>
